package com.tepth.remote.control.delegate.launcher;

import com.tepth.remote.control.base.convert.IStringDataConvert;
import com.tepth.remote.control.base.bean.Config;
import com.tepth.remote.control.base.mvp.BaseModel;
import com.tepth.remote.control.base.mvp.BasePresenter;
import com.tepth.remote.control.base.mvp.BaseView;
import com.tepth.remote.core.net.callback.IError;

import io.reactivex.disposables.Disposable;

/**
 * Description:
 *
 * @author Hequn.Lee
 * @date 2018/11/8
 */
public interface LauncherContract {

    interface View extends BaseView {
        /**
         * 登陆成功
         */
        void loginSuccess();

        /**
         * 登陆失败
         *
         * @param code 错误码
         * @param msg  错误信息
         */
        void loginFailed(int code, String msg);
    }

    interface Model extends BaseModel {
        /**
         * 提供配置文件数据得方法
         *
         * @param imei    手机串号
         * @param convert 数据转换器
         * @param error   错误回调
         * @return 返回观察者
         */
        Disposable provideConfigData(String imei,
                                     IStringDataConvert<Config> convert,
                                     IError error);
    }

    abstract class AbstractPresenter extends BasePresenter {

        /**
         * 获取系统配置信息
         *
         * @param imei 根据手机串号获取
         */
        abstract void getConfig(String imei);

    }

    interface NeedPermissionCallback {
        /**
         * 同意授权的回调
         *
         * @param imei 获取到的IMEI
         */
        void onNeedPermissionSuccess(String imei);

        /**
         * 拒绝授权回调
         */
        void onNeedPermissionFailed();
    }
}
